home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-06-16 | 4.5 KB | 147 lines | [TEXT/YERK] |
- \ GetOp Reese Warner 3/85
- \ 12/17/85 JAF created Symbols <SUPER Dictionary to deal w/ valid 0 values
- \ 03/06/86 GDC fixed immediate mode
- \ 03/07/86 GDC fixed displacement
- \ 03/07/86 GDC fixed PC modes (9 & 10)
- \ The Dreaded GetOp - builds the operand structure
- 25 Symbols SymTab \ jaf 12/17/85 change Dictionary to Symbols
-
- 0 -> dlevel
-
- \ finds operand size
- : ExtSize { addr len \ size -- Size }
- addr c@
- CASE
- ascii L OF 2 -> Size ENDOF
- ascii W OF 1 -> Size ENDOF
- ascii B OF 0 -> Size ENDOF
- 202 AsmError \ bad operand size
- ENDCASE
- size val" ExtSize returns "
- ;
-
- : GetSize { \ Size tt -- tokenType size }
- opSize -> size
- nextToken -> tt
- " ," get: token s=
- IF
- nextToken -> tt
- THEN
- start: token
- " ." indexOf: token
- IF
- drop ( charOf ) nextToken drop msg" EXEC IF"
- get: token extSize -> size
- nextToken -> tt
- THEN
- tt val" tt="
- size val" size="
- ;
-
- : ClearOp { opPtr -- }
- 0 seta/d: opPtr
- 0 setauxsize: opPtr
- 0 setReg: opPtr
- 0 setval: opPtr
- 0 setmode: opPtr
- 0 setauxreg: opPtr
- 0 setpcmode: opPtr
- ;
-
- : GetOp { opPtr \ opDesc type -- }
-
- opptr clearOp
-
- getSize -> opSize -> type
-
- type 1 = \ check for 5 or 6 mode, tokentype 1
- IF
- get: token >num setVal: opPtr
- nextToken drop
- token query: operands -> opDesc
- opDesc 0=
- IF
- 203 AsmError \ unknown operand
- ELSE
- mode: opDesc 2 = mode: opDesc 6 = or
- mode: opDesc 9 = or mode: opDesc 10 = or
- IF
- mode: opDesc dup setpcmode: opPtr
- 7 min val" setMode to" setMode: opPtr
- mode: opPtr 2 = IF 5 setMode: opPtr THEN
- reg: opDesc val" setReg to" setReg: opPtr
- mode: opDesc 6 = mode: opDesc 10 = or
- IF
- nextToken drop \ should be comma
- nextToken drop token query: operands -> opDesc
- mode: opDesc 20 = mode: opDesc 21 = or
- IF
- reg: opDesc setAuxReg: opPtr
- mode: opDesc 20 - val" a/d to" setA/D: opPtr
- 1 setAuxSize: opPtr
- ELSE
- nextToken 3 = \ should be '.', len associated with
- \ idx reg
- IF
- reg: opDesc setAuxReg: opPtr
- mode: opDesc setA/D: opPtr
- nextToken drop get: token extSize setAuxSize: opPtr
- ELSE
- 203 asmError \ unknown operand
- THEN
- THEN
- THEN
- ELSE
- 203 AsmError \ unknown operand
- THEN
- THEN
- ELSE
- token query: operands -> opDesc
- opDesc 0= val" T means Label " \ if operand is a label
- IF \ label, presumably
- pass 1 =
- IF
- token query: symTab
- swap drop \ jaf 12/17/85 remove val
- 0=
- IF
- 0 token enter: symTab
- THEN
- ELSE \ Put code location into value field
- Token query: symTab
- drop \ jaf 12/17/85 remove flag
- codePos - 2- setVal: opPtr
- THEN
- 9 setMode: opPtr
- 2 setReg: opPtr
- ELSE
- reg: opDesc val" reg is " setReg: opPtr
- mode: opDesc val" mode is " setMode: opPtr
- mode: opPtr 11 = \ an Immediate operand
- IF
- nextToken
- 1 =
- IF
- get: token >num setVal: opPtr
- ELSE
- 205 asmError
- THEN
- THEN
- mode: opPtr 8 = \ a dict pointer,compile an immediate
- IF
- 11 setMode: opPtr
- 4 setReg: opPtr
- nextToken drop
- nextToken drop get: token str255 -base latest (find)
- IF
- drop
- setVal: opPtr
- ELSE
- 216 asmError
- THEN
- nextToken drop
- THEN
- THEN
- THEN
- ;
-